package net.openvision.util.logical;


/**
 * Represents a logical expression of some variation of first order logic. A
 * expression is defined as follows: <br>
 * <ul>
 * <li>a predicate is a expression</li>
 * <li>if A and B are expressions so is 'A and B', 'A or B', 'A implies B', 'A
 * iff B'</li>
 * <li>if A is a expression so is 'not A', 'for all x: A', 'there exists x: A',
 * 'for all int i: A', 'there exists int i: A'</li>
 * </ul>
 * Nothing else is a expression. Expressions are built up recursively by the
 * classes in this package. For a detailed definition of the semantic of the
 * logical connectives refer to the corresponding class documentations.
 * 
 * @author Hannes Widmoser
 */
public interface LogicalExpression {
	public boolean evaluate(Environment e);
	//public int getFreeVariableCount();
}
